package View;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingConstants;
import Controller_events.askScommessaEvent;
import Gui_Events.setScommessaEvent;
import Model.Lavagna;

public class Scommesse_GUI {

	GUI_interface gui;
	private JPanel panel;
	private JPanel panel_1;
	private JFrame frame;
	private  askScommessaEvent inEvent;
	private final ButtonGroup buttonGroup = new ButtonGroup();
	private JLabel JLscudscelta;
	private JLabel JLimporto ;
	private JLabel JLimportoBig;
	private JLabel lblNewLabel;
	private String colore_scud="";
	private String tipo_bet="";
	private int money_temp;
	
	private String current_prop_scud;
	private String currentpg;
	private String currentcard1;
	private String currentcard2;
	private int player_money;
	private int player_pv;
	private int player_min_bet;
	private JButton JLpersonaggio;
	private JButton JLpropscud;
	private JButton JBcard1;
	private JButton JBcard2;
	
	private JLabel segnalinibianco;
	private JLabel segnaliniblu;
	private JLabel segnaliniverde;
	private JLabel segnalininero;
	private JLabel segnalinigiallo;
	private JLabel segnalinirosso;
	
	private JLabel 	JLscudbianca;
	private JLabel JLdispverde;
	private JLabel JLdispgialla;
	private JLabel JLdispnera ;
	private JLabel JLdisprossa;
	private JLabel JLdispblu ;
	
	private Lavagna lavagna;



	/**
	 * Create the application.
	 */
	public Scommesse_GUI(final GUI_interface gui) {
		
		this.gui = gui;
		frame = gui.get_frame();
		frame.setTitle("FASE SCOMMESSE");
		frame.setBounds(0, 0, 732, 737);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		frame.setResizable(false);
		frame.setEnabled(true); // di ritorno da una gara devo reimpostare il frame a false ( serve per la rete )
		
		
		panel = new JPanel() { //nota che con l'apertura della graffa creiamo una sottoclasse di JPanel
		
			@Override
			protected void paintComponent(Graphics graphics) {
				super.paintComponent(graphics);
				
				ImageIcon legni = new ImageIcon(gui.resizeImage("images/images.jpg", 732, 543));
				Image legno = legni.getImage();
				graphics.drawImage(legno, 0, 0, null);
			}
		};
		panel.setBounds(0, 0, 726, 539);
		frame.getContentPane().add(panel);
		panel.setLayout(null);
		
		panel_1 = new JPanel(){ //nota che con l'apertura della graffa creiamo una sottoclasse di JPanel
			
			@Override
			protected void paintComponent(Graphics graphics) {
				super.paintComponent(graphics);
				
				ImageIcon legni = new ImageIcon(gui.resizeImage("images/gcarpet.jpg", 726, 166));
				Image legno = legni.getImage();
				graphics.drawImage(legno, 0, 0, null);
			}
		};
		panel_1.setBounds(0, 539, 726, 166);
		frame.getContentPane().add(panel_1);
		panel_1.setLayout(null);
		
		JLimportoBig = new JLabel("0");
		JLimportoBig.setForeground(Color.YELLOW);
		JLimportoBig.setHorizontalAlignment(SwingConstants.CENTER);
		JLimportoBig.setFont(new Font("Monotype Corsiva", Font.BOLD, 70 ));
		JLimportoBig.setBounds(24, 313, 692, 68);
		panel.add(JLimportoBig);
		
		JLabel lblScuderiaScelta = new JLabel("Scuderia scelta");
		lblScuderiaScelta.setHorizontalAlignment(SwingConstants.LEFT);
		lblScuderiaScelta.setBounds(265, 107, 119, 14);
		panel_1.add(lblScuderiaScelta);
		
		JLscudscelta = new JLabel("New label");
		JLscudscelta.setHorizontalAlignment(SwingConstants.CENTER);
		JLscudscelta.setBounds(404, 107, 109, 14);
		panel_1.add(JLscudscelta);
		
		ImageIcon scudblu = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/blu.jpg", 89, 121));
		JButton JBscudblu = new JButton(scudblu);
		JBscudblu.setBounds(30, 96, 89, 121);
		JBscudblu.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				colore_scud="blu";
				JLscudscelta.setText(colore_scud);
			}
		});
		panel.add(JBscudblu);
		
		ImageIcon scudgialla = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/giallo.jpg", 89, 121));
		JButton JBscudgialla = new JButton(scudgialla);
		JBscudgialla.setBounds(149, 96, 89, 121);
		JBscudgialla.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				colore_scud="giallo";
				JLscudscelta.setText(colore_scud);

				
			}
		});
		panel.add(JBscudgialla);
		
		
		ImageIcon scudrossa = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/rosso.jpg", 89, 121));
		JButton JBscudrossa = new JButton(scudrossa);
		JBscudrossa.setBounds(273, 96, 89, 121);
		JBscudrossa.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				colore_scud="rosso";	
				JLscudscelta.setText(colore_scud);

			}
		});
		panel.add(JBscudrossa);
		
		
		ImageIcon scudnera = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/nero.jpg", 89, 121));
		JButton JBscudnera = new JButton(scudnera);
		JBscudnera.setBounds(388, 96, 89, 121);
		JBscudnera.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				colore_scud="nero";	
				JLscudscelta.setText(colore_scud);
			}
		});
		panel.add(JBscudnera);
		
		
		ImageIcon scudverde = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/verde.jpg", 89, 121));
		JButton JBscudverde = new JButton(scudverde);
		JBscudverde.setBounds(500, 96, 89, 121);
		JBscudverde.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				colore_scud="verde";
				JLscudscelta.setText(colore_scud);

			}
		});
		panel.add(JBscudverde);
		
		ImageIcon scudbianca = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/bianco.jpg", 89, 121));
		JButton JBscudbianca = new JButton(scudbianca);
		JBscudbianca.setBounds(613, 96, 89, 121);
		
		panel.add(JBscudbianca);
		
		
		JLscudbianca = new JLabel();
		JLscudbianca.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		JLscudbianca.setForeground(Color.WHITE);
		JLscudbianca.setBounds(637, 228, 46, 14);
		JBscudbianca.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				colore_scud="bianco";	
				JLscudscelta.setText(colore_scud);

			}
		});
		segnalinibianco= new JLabel(); 
		segnalinibianco.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		segnalinibianco.setForeground(Color.WHITE);
		segnalinibianco.setBounds(642, 258, 46, 14);
		panel.add(segnalinibianco);
		panel.add(JLscudbianca);
		
		
		 JLdispverde = new JLabel();
		JLdispverde.setFont(new Font("Monotype Corsiva", Font.PLAIN,20));
		JLdispverde.setForeground(Color.WHITE);
		JLdispverde.setBounds(522, 223, 60, 14);
		panel.add(JLdispverde);
		
		segnaliniverde = new JLabel();
		segnaliniverde.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		segnaliniverde.setForeground(Color.WHITE);
		segnaliniverde.setBounds(527, 253, 60, 14);
		panel.add(segnaliniverde);
		
		
		
		 JLdispnera = new JLabel();
		JLdispnera.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		JLdispnera.setForeground(Color.WHITE);
		JLdispnera.setBounds(410, 223, 46, 14);
		panel.add(JLdispnera);
		
		segnalininero = new JLabel();
		segnalininero.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		segnalininero.setForeground(Color.WHITE);
		segnalininero.setBounds(415, 253, 46, 14);
		panel.add(segnalininero);
		
	
		 JLdisprossa = new JLabel();
		JLdisprossa.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		JLdisprossa.setForeground(Color.WHITE);
		JLdisprossa.setBounds(297, 223, 46, 14);
		panel.add(JLdisprossa);
		
		segnalinirosso = new JLabel();
		segnalinirosso.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		segnalinirosso.setForeground(Color.WHITE);
		segnalinirosso.setBounds(303, 253, 46, 14);
		panel.add(segnalinirosso);
		
		
		 JLdispgialla = new JLabel();
		JLdispgialla.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		JLdispgialla.setForeground(Color.WHITE);
		JLdispgialla.setBounds(171, 223, 46, 14);
		panel.add(JLdispgialla);
		
		segnalinigiallo = new JLabel();
		segnalinigiallo.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		segnalinigiallo.setForeground(Color.WHITE);
		segnalinigiallo.setBounds(176, 253, 46, 14);
		panel.add(segnalinigiallo);
		
		
		JLdispblu = new JLabel();
		JLdispblu.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		JLdispblu.setForeground(Color.WHITE);
		JLdispblu.setBounds(51, 223, 46, 14);
		panel.add(JLdispblu);
		
		segnaliniblu = new JLabel();
		segnaliniblu.setFont(new Font("Monotype Corsiva", Font.PLAIN, 20));
		segnaliniblu.setForeground(Color.WHITE);
		segnaliniblu.setBounds(56, 253, 46, 14);
		panel.add(segnaliniblu);
		
		JLimporto = new JLabel("0");
		JLimporto.setBounds(423, 11, 46, 40);
		panel_1.add(JLimporto);
		JLimporto.setHorizontalAlignment(SwingConstants.CENTER);
		
		lblNewLabel = new JLabel();
		lblNewLabel.setForeground(Color.WHITE);
		lblNewLabel.setFont(new Font("Monotype Corsiva", Font.ITALIC, 45));
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setBounds(10, 11, 692, 49);
		panel.add(lblNewLabel);
		
		ImageIcon cash1000 = new ImageIcon(gui.resizeImage("images/cash1000.JPG", 89, 140));
		JButton JB1000 = new JButton(cash1000);
		JB1000.setBounds(243, 392, 89, 140);
		JB1000.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				if(Integer.parseInt(JLimporto.getText())+1000<=player_money )
				  {money_temp+=1000;
				   JLimporto.setText(Integer.toString(money_temp));
				   JLimportoBig.setText(Integer.toString(money_temp));
				  }
				else{
					JOptionPane.showMessageDialog(null, "Non hai abbastanza soldi");
				}
				
			}
		});
		panel.add(JB1000);
		
		ImageIcon cash500 = new ImageIcon(gui.resizeImage("images/cash500.JPG", 89, 140));
		JButton JB500 = new JButton(cash500);
		JB500.setBounds(337, 392, 89, 140);
		JB500.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				if(Integer.parseInt(JLimporto.getText())+500<=player_money )
				  {money_temp+=500;
				   JLimporto.setText(Integer.toString(money_temp));
				   JLimportoBig.setText(Integer.toString(money_temp));
				  }
				else{
					JOptionPane.showMessageDialog(null, "Non hai abbastanza soldi");
				}
				
			}
		});

		panel.add(JB500);
		
		ImageIcon cash100 = new ImageIcon(gui.resizeImage("images/cash100.JPG", 89, 140));
		JButton JB100 = new JButton(cash100);
		JB100.setBounds(431, 392, 89, 140);
		JB100.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				if(Integer.parseInt(JLimporto.getText())+100<=player_money )
				  {money_temp+=100;
				   JLimporto.setText(Integer.toString(money_temp));
					JLimportoBig.setText(Integer.toString(money_temp));
				  }
				else{
					JOptionPane.showMessageDialog(null, "Non hai abbastanza soldi");
				}
			}
		});
		panel.add(JB100);
		
	
		JLpersonaggio = new JButton();
		JLpersonaggio.setBounds(10, 2, 96, 161);
        JLpersonaggio.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"o---Situazione---o\n"+" +Money: "+player_money+"\n"+" +Pv: "+player_pv+"\n"+" +Min bet: "+player_min_bet+"\n", "Carte personaggio pescata", JOptionPane.INFORMATION_MESSAGE,new ImageIcon(currentpg));;		
			}
		}); 
		panel_1.add(JLpersonaggio);
		
		
		JLpropscud = new JButton();
		JLpropscud.setBounds(116, 31, 70, 122);
		JLpropscud.addActionListener(new ActionListener() {
				
				public void actionPerformed(ActionEvent e) {
					JOptionPane.showMessageDialog(null, "", "Scuderia di tua proprieta'", JOptionPane.INFORMATION_MESSAGE,new ImageIcon("immagini_carte_scuderia/"+current_prop_scud+".jpg"));		
				}
			}); 
		panel_1.add(JLpropscud);
		
		JBcard1 = new JButton();
		JBcard1.setBounds(544, 2, 77, 149);
		 JBcard1.addActionListener(new ActionListener() {
				
				public void actionPerformed(ActionEvent e) {
					JOptionPane.showMessageDialog(null,"", "Prima carta azione pescata", JOptionPane.INFORMATION_MESSAGE,new ImageIcon(currentcard1));;		
				}
			}); 
		panel_1.add(JBcard1);
		
		JBcard2 = new JButton();
		JBcard2.setBounds(631, 2, 77, 149);
		JBcard2.addActionListener(new ActionListener() {
				
				public void actionPerformed(ActionEvent e) {
					JOptionPane.showMessageDialog(null,"", "Prima carta azione pescata", JOptionPane.INFORMATION_MESSAGE,new ImageIcon(currentcard2));;		
				}
			}); 
		panel_1.add(JBcard2);

		JLabel lblImportoScommessa = new JLabel("importo scommessa");
		lblImportoScommessa.setBounds(242, 11, 156, 40);
		panel_1.add(lblImportoScommessa);
		lblImportoScommessa.setHorizontalAlignment(SwingConstants.CENTER);
		
		JButton btnResetSoldi = new JButton("Reset soldi");
		btnResetSoldi.setBounds(264, 132, 119, 23);
		btnResetSoldi.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				money_temp=0;
				JLimporto.setText(Integer.toString(money_temp));
				JLimportoBig.setText(Integer.toString(money_temp));
			}
		});
		panel_1.add(btnResetSoldi);
		
		JLabel lblTipoScommessa = new JLabel("Tipo scommessa");
		lblTipoScommessa.setBounds(217, 53, 206, 44);
		panel_1.add(lblTipoScommessa);
		lblTipoScommessa.setHorizontalAlignment(SwingConstants.CENTER);
		
		JRadioButton rdbtnPiazzata = new JRadioButton("Piazzata");
		rdbtnPiazzata.setBounds(404, 74, 109, 23);
		panel_1.add(rdbtnPiazzata);
		buttonGroup.add(rdbtnPiazzata);
		rdbtnPiazzata.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				tipo_bet="Piazzata";
				
			}
		});
		rdbtnPiazzata.setBackground(Color.GRAY);
		
		JRadioButton rdbtnVincente = new JRadioButton("Vincente");
		rdbtnVincente.setBounds(404, 49, 109, 23);
		panel_1.add(rdbtnVincente);
		buttonGroup.add(rdbtnVincente);
		rdbtnVincente.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				tipo_bet="Vincente";
				
			}
		});
		rdbtnVincente.setBackground(Color.GRAY);
		
		JButton confirm = new JButton("Next>>");
		confirm.setBounds(403, 132, 110, 23);
		confirm.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				boolean error=false;
				if (money_temp<player_min_bet) {
					error=true;
					JOptionPane.showMessageDialog(null, "Devi Scommettere piu soldi rispetto alla scommessa minima","Errore",JOptionPane.ERROR_MESSAGE);
				}
				else if (colore_scud.equals("")) {
					error=true;
					JOptionPane.showMessageDialog(null, "Devi scegliere una scuderia","Errore",JOptionPane.ERROR_MESSAGE);
				}
				else if (tipo_bet.equals("")) {
					error=true;
					JOptionPane.showMessageDialog(null, "Devi indicare tipo scommessa","Errore",JOptionPane.ERROR_MESSAGE);

				}
				
				if (error!=true) {
					if(inEvent.isSeconda_scommessa()){
						setScommessaEvent evt = new setScommessaEvent(money_temp, tipo_bet, colore_scud,true);
						inEvent.getController().create_second_bet(evt);
						buttonGroup.clearSelection();
					}
					else{
						setScommessaEvent evt = new setScommessaEvent(money_temp, tipo_bet, colore_scud,false);
						inEvent.getController().create_bet(evt);
						buttonGroup.clearSelection();

					}
				
				}
			
			}
			
		
		});
		panel_1.add(confirm);
		panel.revalidate();

		panel_1.revalidate();
		frame.repaint();
		
	}

	/**
	 * Show viene richiamato su questo frame per non dover tutte le volte reinizializzare tutto.
	 * @param evt
	 */
	public void show(final askScommessaEvent evt){
		lavagna=evt.getLavagna();
		money_temp=0;
		colore_scud="";
		tipo_bet="";
		currentpg="";
		currentcard1="";
		currentcard2="";
		current_prop_scud="";
		JLscudscelta.setText("");
		JLimporto.setText("0");
		JLimportoBig.setText("0");
		this.inEvent = evt;
		this.player_money = evt.get_giocatore().get_money();
		this.player_min_bet = evt.get_giocatore().get_min_bet();
		this.currentpg = evt.get_giocatore().get_character_card().getImmagine();
		this.current_prop_scud = evt.get_giocatore().get_scuderia();
		this.player_pv = evt.get_giocatore().get_pv();
		this.currentcard1 = evt.get_giocatore().get_action_cards().get(0).getImmagine();
		this.currentcard2 = evt.get_giocatore().get_action_cards().get(1).getImmagine();
		lblNewLabel.setText(inEvent.get_giocatore().get_nome()+" fai la tua scommessa");
		String imgcharacterpath = 	inEvent.get_giocatore().get_character_card().getImmagine();
		ImageIcon Imagecharacter = new ImageIcon(gui.resizeImage(imgcharacterpath, 96, 175));
		JLpersonaggio.setIcon(Imagecharacter);
		String scudproppath = 	inEvent.get_giocatore().get_scuderia();
		ImageIcon Imagescud = new ImageIcon(gui.resizeImage("immagini_carte_scuderia/"+scudproppath+".jpg", 74, 125));
		JLpropscud.setIcon(Imagescud);
		String imgcard1path = 	inEvent.get_giocatore().get_action_cards().get(0).getImmagine();
		ImageIcon Imagecard1 = new ImageIcon(gui.resizeImage(imgcard1path, 77, 160));
		JBcard1.setIcon(Imagecard1);
		String imgcard2path =  inEvent.get_giocatore().get_action_cards().get(1).getImmagine();
		ImageIcon Imagecard2 = new ImageIcon(gui.resizeImage(imgcard2path, 77, 160));
		JBcard2.setIcon(Imagecard2);
		segnalinibianco.setText(Integer.toString(inEvent.getDisp_scud().get("bianco")));
		segnaliniblu.setText(Integer.toString(inEvent.getDisp_scud().get("blu")));
		segnalinirosso.setText(Integer.toString(inEvent.getDisp_scud().get("rosso")));
		segnalinigiallo.setText(Integer.toString(inEvent.getDisp_scud().get("giallo")));
		segnalininero.setText(Integer.toString(inEvent.getDisp_scud().get("nero")));
		segnaliniverde.setText(Integer.toString(inEvent.getDisp_scud().get("verde")));
		JBcard1.setToolTipText(evt.get_giocatore().get_card_at_index(0).get_descrizione());
		JBcard2.setToolTipText(evt.get_giocatore().get_card_at_index(1).get_descrizione());
		int quotazione=2+ lavagna.getPosizione("bianco");
		String quot = " 1 :"+quotazione;
		JLscudbianca.setText(quot);
		
		quotazione=2+ lavagna.getPosizione("verde");
		quot = " 1 :"+quotazione;
		JLdispverde.setText(quot);
		
		quotazione=2+ lavagna.getPosizione("giallo");
		quot = " 1 :"+quotazione;
		JLdispgialla.setText(quot);
		
		quotazione=2+ lavagna.getPosizione("rosso");
		quot = " 1 :"+quotazione;
		JLdisprossa.setText(quot);
		
		quotazione=2+ lavagna.getPosizione("blu");
		quot = " 1 :"+quotazione;
		JLdispblu.setText(quot);
		
		quotazione=2+ lavagna.getPosizione("nero");
		quot = " 1 :"+quotazione;
		JLdispnera.setText(quot);

		
		if (inEvent.isErrore_cavallo()) {
			JOptionPane.showMessageDialog(null, "Segnalini esauriti sul cavallo sceglierne un altro","Errore",JOptionPane.ERROR_MESSAGE);

		}else if (inEvent.isErrore_tipo()) {
			JOptionPane.showMessageDialog(null, "Devi scommettere Piazzato se prima hai scommesso vincente e viceversa","Errore",JOptionPane.ERROR_MESSAGE);

		}
		frame.setVisible(true);
		frame.repaint();
	
	}
	
}
